
// 封装axios
import axios from 'axios'
import { Toast, Notify } from 'vant'

// 封装代码 get post delete patch
// 详情参考: https://www.npmjs.com/package/axios
axios.defaults.baseURL = 'http://localhost:9966/'
// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;  // 请求头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'

export function showLoading(msg) { // 轻提示
    msg = msg || '加载中...'
    Toast.clear() // Toast 已在公共文件 不需要加this.
    Toast.loading({ // // 轻提示：转圈圈
        message: '加载中...',
        forbidClick: true,
    })
}

export function showSuccessMsg(msg = '成功') { // 轻提示
    Toast.clear()
    Notify.clear()
    Notify({ type: 'success', message: msg })
}

export function showErrorMsg(msg = '失败') {
    Toast.clear()
    Notify.clear()
    Notify({ type: 'danger', message: msg })
}

// Interceptors 拦截器
// Add a request interceptor: 添加一个请求发送之前的拦截器
axios.interceptors.request.use(function (config) {
    // 请求发送之前转圈圈
    // Loading
    showLoading() // 轻提示：转圈圈
    return config
}, function (error) {
    // 请求发送失败 
    console.log(error)
    showErrorMsg("请求失败")
    return Promise.reject(error)
});



// Add a response interceptor: 添加一个响应完成之前的拦截器 
axios.interceptors.response.use(function (response) {
    console.log(response.data)
    // 根据状态 code 实现对应的业务逻辑 
    // 待定 
    // showSuccessMsg() 弹框有问题！！！！
    Toast.clear();
    return response
}, function (error) {
    // 响应失败 
    // 404 503 
    console.log(error)
    showErrorMsg("响应失败")
    return Promise.reject(error)
})

export function get(url, params, headers) {
    return new Promise(function (resolve, reject) {
        axios({
            method: 'get',
            url,
            params: params,
            headers: headers
        })
            .then(res => {
                resolve(res.data)   // axios 的数据套在 data里
            })
            .catch(err => {
                reject(err)
            })
    })
}

export function post(url, data, params, headers) {
    return new Promise(function (resolve, reject) {
        axios({
            method: 'post',
            url,
            data: data, // post 提交的数据
            params: params,
            headers: headers
        })
            .then(res => {
                resolve(res.data) // axios 的数据套在 data里
            })
            .catch(err => {
                reject(err)
            })
    })
}

export function Delete(url, data, params, headers) {
    return new Promise(function (resolve, reject) {
        axios({
            method: 'delete',
            url,
            data: data, // post 提交的数据
            params: params,
            headers: headers
        })
            .then(res => {
                resolve(res.data) // axios 的数据套在 data里
            })
            .catch(err => {
                reject(err)
            })
    })
}

export function Patch(url, data, params, headers) {
    return new Promise(function (resolve, reject) {
        axios({
            method: 'patch',
            url,
            data: data, // post 提交的数据
            params: params,
            headers: headers
        })
            .then(res => {
                resolve(res.data) // axios 的数据套在 data里
            })
            .catch(err => {
                reject(err)
            })
    })
}

export {
    axios
}